package com.gxa.p2p.controller;

import com.gxa.p2p.businessExceptionCode.ErrorCode;
import com.gxa.p2p.exception.BusinessException;
import com.gxa.p2p.pojo.Loan;
import com.gxa.p2p.service.LoanUserService;
import com.gxa.p2p.util.MapUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * TODO
 *对借款人的信息操作的控制层
 * @author 瓶子
 * @Date 2020/8/4
 */
@CrossOrigin
@Controller
@ResponseBody
@RequestMapping("/loanUser")
@Api(value = "实体类loan的控制器",tags = "负责借款人信息处理")
public class LoanUserController {
    @Resource(name = "LoanUserService")
    LoanUserService loanUserService;

    /**
     * 方法：查询所有借款人信息的方法
     * @param map 传入的分页页数和每页内容
     * @return 返回给前端查询到的个人信息数据
     */
    @GetMapping("/findAll")
    @ResponseBody
    @ApiOperation(value ="查询所有的借款人信息的接口",notes = "查询所有的方法",response = Map.class,httpMethod = "GET")
    public Map<String ,Object> findAll(@RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();//Map工具类的对象
        List<Loan> byAll = loanUserService.findByAll(map);//从服务层调用查询所有的方法
        Integer integer = loanUserService.countAll(map);//数据总量的计算
        System.out.println("byAll:"+byAll);
        if (byAll!=null){
            mapUtil.put("counts",integer);
            mapUtil.setData(byAll);
            mapUtil.setMsg("查询所有成功");
            mapUtil.setCode("0");//对前端数据的封装，封装成键值对的形式
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return  mapUtil.getMap();//返回给前端的数据
    }

    /**
     * 方法：输入借款人姓名，来查询用户信息
     * @param map 借款人姓名
     * @return 返回给前端查询到的个人信息数据
     */
    @GetMapping("/findByName")
    @ResponseBody
    @ApiOperation(value ="查询借款人姓名的信息接口",notes = "查询姓名的方法",response = Map.class,httpMethod = "GET")
    public Map<String ,Object> findByName(@RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();//Map工具类的对象
        List<Loan> byName = loanUserService.findByName(map);//从服务层调用查询借款人姓名的方法
        Integer integer = loanUserService.countAll(map);//借款用户数量
        if (byName!=null){
            mapUtil.setData(byName);
            mapUtil.put("counts",integer);
            mapUtil.setMsg("查询姓名成功");
            mapUtil.setCode("0");//对前端数据的封装，封装成键值对的形式
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return  mapUtil.getMap();//返回给前端封装好的数据
    }

    /**
     * 方法：通过前端查询的借款人姓名或电话来显示借款人信息
     * @param map 前端查询的
     * @return 返回给前端查询到的个人信息数据
     */
    @GetMapping("/findByNameOrPhoneNum")
    @ResponseBody
    @ApiOperation(value ="查询姓名或电话借款人信息的接口",notes = "查询姓名或电话的方法",response = Map.class,httpMethod = "GET")
    public Map<String ,Object> findByNameOrPhoneNum(@RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();//Map工具类的对象
        List<Loan> byNameOrPhoneNum = loanUserService.findByNameOrPhoneNum(map);//从服务层调用，查询借款人姓名或电话的方法
        Integer integer = loanUserService.countAll(map);//借款人的用户数量
        if (byNameOrPhoneNum!=null){
            mapUtil.setData(byNameOrPhoneNum);
            mapUtil.put("counts",integer);
            mapUtil.setMsg("查询姓名或电话号码成功");
            mapUtil.setCode("0");//对前端数据的封装，封装成键值对的形式
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return  mapUtil.getMap();//返回给前端封装好的数据
    }

    /**
     * 方法：通过查询借款人状态，查询信息的方法
     * @param map 借款人的状态
     * @return 返回给前端查询到的个人信息数据
     */
    @GetMapping("/findByStatus")
    @ResponseBody
    @ApiOperation(value ="查询款人状态的接口",notes = "查询借款人状态方法",response = Map.class,httpMethod = "GET")

    public Map<String ,Object> findByStatus(@RequestBody @ApiParam(readOnly = true,name = "map",type = "java.util.Map") Map<String,Object> map){
        MapUtil mapUtil=new MapUtil();//Map工具类的对象
        Integer integer = loanUserService.countAll(map);//借款人的用户数量
        List<Loan> byStatus = loanUserService.findByStatus(map);//从服务层调用，查询借款人状态的方法
        if (byStatus!=null){
            mapUtil.setData(byStatus);
            mapUtil.put("counts",integer);
            mapUtil.setMsg("查询状态成功");
            mapUtil.setCode("0");//对前端数据的封装，封装成键值对的形式
        }else {
            throw new BusinessException(ErrorCode.FAILED);//异常处理
        }
        return  mapUtil.getMap();//返回给前端封装好的数据
    }

}
